Faceting e outros

Aula 18, M3

Carolina Musso

Sala de Situação - UnB

Esta semana

Aula 18 - “Facetamento” e outros gráficos

  • Como apresentar vários gráficos relacionados juntos com facet_wrap e facet_grid

  • Extensões do ggplot , inclusão de texto e imagens, gráficos de Violino, Jitter, Rosca …

Aula 19 - Exercícios

  • Colocar em dia os exercícios

Leituras para aprofundamento

Vários gráficos

Ao mesmo tempo!

if (!require(pacman)) install.packages("pacman") 

pacman::p_load( tidyverse,rio, patchwork) 

linelist <- import("Exercicios/linelist_cleaned.rds") %>% 
  filter_all(all_vars(!is.na(.)))%>% # função nova!
  filter(wt_kg>0,
         age_years>=0) 
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")

facet_grid

ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_grid(gender~fever)

ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_grid(gender~fever,
             labeller = labeller(fever = c(no="Sem Febre", yes="Com Febre"), 
                    gender = c(f="Feminino", m="Masculino")))

Só uma variável

  • Só linhas
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_grid(gender~.)

  • Só colunas
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_grid(.~gender)

facet_wrap

  • Pode fazer o mesmo
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_wrap(.~gender)

facet_wrap

  • Pode ter algumas vantagens.
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_wrap(~age_cat)

  • Ajustar o número de linhas/colunas manualmente
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")+
  facet_wrap(~age_cat, ncol = 4)

Pacote patckwork

p1 <- ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")

p2 <- ggplot(linelist, aes(x = age_cat, y = wt_kg))+
  geom_boxplot() +
  labs(
    x = "Faixa-Etária", y = "Peso (kg)")
  • Um do lado do outro
p1 + p2

  • Um sobre o outro
p1 / p2

Outros layouts

p3<- ggplot(linelist, aes(x =fever))+
  geom_bar() +
  labs(
    x = "Febre", y = "N pessoas")

p1 + p2/p3

Outros layouts

p1 + inset_element(p2, 
                   left = 0.45, 
                   bottom = 0.1, 
                   right = 0.95, 
                   top = 0.5)

Outros tipos de gráficos

Gráfico de violino

Tipo um box-plot…

if (!require(pacman)) install.packages("pacman") 

pacman::p_load( tidyverse,rio, janitor, RColorBrewer,
                ggridges, emojifont, fontawesome
                ) 

linelist <- import("Exercicios/linelist_cleaned.rds") %>% 
  filter_all(all_vars(!is.na(.)))%>% # função nova!
  filter(wt_kg>0,
         age_years>=0) 
ggplot(linelist, aes(x = age_cat, y = wt_kg))+
  geom_violin() +
  labs(
    x = "Idade (anos)", y = "Peso (kg)")

Grafico de “pizza”

  • Controverso! Mas . . .

  • Muita gente gosta e usa!

sumario <- linelist %>% 
  filter(hospital!="Missing",
         hospital!="Other") %>% 
  tabyl(hospital) 

ggplot(sumario, aes(x="", y=n, fill=hospital)) +
  geom_col( width=1, color="black") +
  coord_polar("y", start=0)+
  theme_void()+
  scale_fill_brewer("", palette = "Set2")

Adicionar texto

ggplot(sumario, aes(x="", y=n, fill=hospital)) +
  geom_col( width=1, color="black") +
  coord_polar("y", start=0)+
  theme_void()+
  scale_fill_brewer("", palette = "Set2")+
  geom_text(aes(x=1.1, label = paste0(round(percent*100,0), "%")), 
            color = "white", size=4, 
            position = position_stack(vjust = 0.5))

ggridges

ggplot(linelist, aes(x = wt_kg, y=age_cat, fill=age_cat))+
  geom_density_ridges()+
  scale_fill_brewer("Faixa", palette = "Set3")

geom_textpath

pacman::p_load_gh("AllanCameron/geomtextpath")
ggplot(linelist, aes(x = age, y = wt_kg))+
  geom_point() +
   geom_labelsmooth(aes(label = "Linha de tendencia"), 
                    text_smoothing = 30, 
                    fill = "lightblue",
                    color= "indianred") +
  theme_classic()

gg_img

set.seed(42)
linelist %>% 
  sample_n(50) %>% 
  filter(!is.na(gender)) %>% 
  mutate(figura=ifelse(outcome=="Death", fontawesome("fa-twitter"),
                       fontawesome("fa-coffee"))) %>% 
ggplot(aes(x = age, y = wt_kg, label=figura, color=figura))+
  scale_color_manual(values=c("#1DA1F2", "black"))+
   geom_text(family='fontawesome-webfont', size=4)+
  theme_void()+
  theme(legend.position = "none")

Obrigada!